﻿#include "shadow_widget.h"

#include <QResizeEvent>

ShadowWidget::ShadowWidget(QWidget *parent)
    : __BASE_WIDGET_CLASS__(parent)
    , m_border_color(0, 0, 0)
{
    // 初始化
    m_shadow_width = 10;

    // 去除默认的窗口框架.
    setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint /* | Qt::WindowSystemMenuHint */);

    // 注意此处设置透明之后，子控件也会变得背景透明（无背景）。
    // 一级子控件需要自行设置背景色。
    setAttribute(Qt::WA_TranslucentBackground);

    // 开始配置阴影
    m_shadow_effect.setBlurRadius(m_shadow_width);
    m_shadow_effect.setColor(m_border_color);
    m_shadow_effect.setOffset(0, 0); // 默认为四周阴影。偏移为0是实现要点。
    this->setGraphicsEffect(&m_shadow_effect);

    // 预置一个垂直布局器，用于给边框腾出空间.
    setLayout(&m_layout_root);
    m_layout_root.setContentsMargins(m_shadow_width, m_shadow_width, m_shadow_width, m_shadow_width);
}


ShadowWidget::~ShadowWidget()
{

}

/**
 * @brief ShadowWidget::setShadowWidth
 *  设置边框宽度
 * @param shadow_width
 */
void ShadowWidget::setShadowWidth(int shadow_width)
{
    if (shadow_width < 0)
    {
        return;
    }

    m_shadow_width = shadow_width;
    m_layout_root.setContentsMargins(m_shadow_width, m_shadow_width, m_shadow_width, m_shadow_width);
    m_shadow_effect.setBlurRadius(m_shadow_width);
}

/**
 * @brief ShadowWidget::setShadowColor
 *  设置边框颜色
 * @param color
 */
void ShadowWidget::setShadowColor(QColor &color)
{
    m_border_color = color;
}

void ShadowWidget::setShadowOffset(qreal dx, qreal dy)
{
    m_shadow_effect.setOffset(dx, dy);
}

/**
 * @brief 最大化时隐藏阴影.
 */
void ShadowWidget::showMaximized()
{
    m_layout_root.setContentsMargins(0, 0, 0, 0);
    __BASE_WIDGET_CLASS__::showMaximized();
}

void ShadowWidget::showNormal()
{
    m_layout_root.setContentsMargins(m_shadow_width, m_shadow_width, m_shadow_width, m_shadow_width);
    __BASE_WIDGET_CLASS__::showNormal();
}
